package com.aust.reflect;

import java.lang.reflect.Field;

public class Reflect5 {
    public static void main(String[] args) throws Exception {
        Class<Student> studentClass = Student.class;

        /**
         * 获取指定名称的 public 字段（包括继承的）
         */
        Field field = studentClass.getField("name");
        Student student1 = new Student();
        /**
         * 设置字段值
         */
        field.set(student1, "tangruojie");
        /**
         * 获取字段值
         */
        System.out.println(field.get(student1));

        /**
         * 获取指定名称的 本类中定义的字段，不论访问权限
         */
        Field declaredField = studentClass.getDeclaredField("age");
        /**
         * 用 getDeclaredField() 可以获取到 private 字段对象，但是如果你想访问或修改它的值，就必须调用 setAccessible(true) 来关闭权限检查。
         */
        declaredField.setAccessible(true);
        Student student2 = new Student();
        /**
         * 设置字段值
         */
        declaredField.set(student2, 18);
        /**
         * 获取字段值
         */
        System.out.println(declaredField.get(student2));
    }
}
